#ifndef GOBANG_H
#define GOBANG_H

#include <QWidget>
#include <QLabel>
#include <QPixmap>
#include <QDebug>
#include <QTimer>
#include <QMouseEvent>
#include <QFont>
#include <QLabel>
#include <QTcpSocket>
#include <QHostAddress>
#include <QLineEdit>
#include <QMessageBox>
#include <QTimer>

//#include "labelevent.h"

#define GOBANGNAME      "七七五子棋"          // 七七五子棋
#define TCPSERVICE_IP   "192.168.146.132"     // 五子棋服务器端IP地址（需要根据你在服务器端的IP地址进行更改）
#define PORT            1001                  // 五子棋服务器端端口号

namespace Ui {
class Gobang;
}

class Gobang : public QWidget
{
    Q_OBJECT

public:
    explicit Gobang(QWidget *parent = 0);

    ~Gobang();

protected:
    void paintEvent(QPaintEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);

    void JudgeOutcome();
    void NetOutcome();
    void Netgameoverdatainit();

protected slots:
    void RunTimer();
    void tcpconnect();
    void tcpdisconnect();
    void tcpreaddata();

private:
    Ui::Gobang *ui;

    int m_nSteps;           //总步数
    bool m_bFristStep;      //执子方
    bool m_bNextStep;
    int m_nStepdatas[15][15][2];

    //long int m_nAIStepdatas[15][15][12];
    //int m_nStepdata[225][225];
    int m_nmoveX;
    int m_nmoveY;
    bool m_bmovestate;    // 移动状态
    int m_nOutcome;
    int m_nUInum;

    bool m_bConfirmState;
    //QTimer *timer_update;

    QFont font_30;
    QFont font_20;

    QLabel label_btnA;
    QLabel label_btnB;
    QLabel label_btnC;

    QLabel label_rooms[36];
    QString roomsuser[24];
    int m_nroomsnum;

    QPoint m_pWinMove;
    bool m_bWinMovestate;

    bool m_bTCPstate;
    QTcpSocket *tcpsocket;

    QLineEdit *m_lloginname = new QLineEdit;
    QLineEdit *m_lloginpass = new QLineEdit;
    QLineEdit *m_lloginpasses = new QLineEdit;

    QTimer *timer_100ms;

    unsigned int m_nRunTimems;
    unsigned int m_nRunTimes;
    unsigned int m_nRunTimeh;

    QString m_sroomuser[2];  // 房间游戏的两名玩家名
    int m_nroomusr[2];       // 房间游戏的两名玩家准备情况


    int m_nNetSteps;           // 总步数
    bool m_bNetFristStep;      // 执子方
    bool m_bNetNextStep;       // 下一步执子
    bool m_bNetStartgame;      // 开始游戏
    int m_nNetOutcome;         // 判断胜负
    bool m_bNetCallover;          // 告知结束
    int m_nNetStepdatas[15][15][2];

};

struct str_usrdata      // 用户数据
{
    QString usrname;    // 用户名称
    QString passwd;     // 用户密码
    int score;          // 用户积分
    QString friends;    // 好友
    uint number;        // 用户号码
    int gobangnum;      // 对弈局数
    int winnum;         // 胜局数
    int lossnum;        // 败局数
    int room;           // 房间号
    int place;          // 座位号
    int ready;
    QString inform;     // 通知
};



#endif // GOBANG_H
